package com.ls.entity;

import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.baomidou.mybatisplus.annotation.TableId;

import java.time.LocalTime;
import java.time.LocalDateTime;
import java.io.Serializable;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotNull;

/**
 * <p>
 * 短信规则，通话方式-规则 一对多 （不同规则不能包含相同的时间段）互斥 。规则-模板 一对多。
 * </p>
 *
 * @author pengyu
 * @since 2024-06-28
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class SmsRule extends Model<SmsRule> {

    private static final long serialVersionUID = 1L;

    /**
     * 自增主键
     */
    @TableId(value = "rule_id", type = IdType.AUTO)
    private Long ruleId;
    /**模板类别 0为挂机短信，1为关怀短信；为0时call_type生效，1时holiday_id生效*/
    private Integer templateCategory;
    /**节假日id template_category1时生效*/
    private Long holidayId;
    /**提前发送n天，template_category为1时生效*/
    private Integer advance;

    /**
     * template_category0时生效 呼叫规则 ：0 表示 默认规则 呼入： 1 拒接 2 未接通 3 已接通 4勿扰；  呼出：5 所有
     */
    private Integer callType;

    /**
     *template_category0时生效 发送限制类型: 1 无限制 2 每天一次 3 每周一次 4 每月一次
     */
    private Integer limitType;

    /**
     * 规则名称
     */
    private String ruleName;
    /**任务执行总次数*/
    private Integer taskCount;

    /**
     * 规则是否启用
     */
    private Integer validFlag;

    /**
     * 规则生效-开始时间 hh:mm:ss.fraction
     */
    @JsonFormat(pattern = "HH:mm:ss", timezone = "GMT+8")
    @JSONField(format = "HH:mm:ss")
    private LocalTime startTime;

    /**
     *template_category0时生效 规则生效-结束时间 hh:mm:ss.fraction
     */
    @JsonFormat(pattern = "HH:mm:ss", timezone = "GMT+8")
    @JSONField(format = "HH:mm:ss")
    private LocalTime endTime;

    /**
     * APP用户主键
     */
    private Long customerId;

    /**
     * C端用户手机号码
     */
    private String phone;

    /**
     * 是否默认规则 0 默认 1 非默认 一个人只能有一个默认规则
     */
    private Integer defaultStatus;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    /**
     * 更新时间，自动
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;

    /**
     * 自增主键
     */
    @TableField(exist = false)
    private List<SmsTemplate> templateList;
    @TableField(exist = false)
    private List<Linkman> linkmanList;
    @TableField(exist = false)
    private Integer linkmanNum;
    @TableField(exist = false)
    private String holidayName;

    @Override
    protected Serializable pkVal() {
        return this.ruleId;
    }

}
